package com.eimmeer.test;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.einmeer.core.BaseEntity;


import java.util.HashMap;
import java.util.Map;

/**
 * @author 芊嵛
 * @date 2024/3/17
 */
public class AutoCoding {
    public static void main(String[] args) {
        // 定义生成的表名
        String table = "sys_file";
        // 定义项目名称
        String project = "sysfile";
        // 获取父项目路径
        String basePath = System.getProperty("user.dir");
        // 定义entity路径
        String entity = basePath + "/entity/src/main/java/com/einmeer/entity";
        // 定义mapper路径
        String mapper = basePath + "/" + project + "/src/main/java/com/einmeer/mapper";
        // 定义xml路径
        String xml = basePath + "/" + project + "/src/main/resources/com/einmeer/mapper";
        // 定义service路径
        String service = basePath + "/" + project + "/src/main/java/com/einmeer/service";
        // 定义service实现路径
        String service_impl = basePath + "/" + project + "/src/main/java/com/einmeer/service/impl";
        // 定义controller路径
        String controller = basePath + "/" + project + "/src/main/java/com/einmeer/controller";
        // 定义生成器对象
        AutoGenerator generator = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        // 生成后不打开目录
        gc.setOpen(false);
        // 作者
        gc.setAuthor("einmeer");
        // service接口去掉前面的I
        gc.setServiceName("%sService");
        generator.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUrl("jdbc:mysql://192.168.21.130:3306/shop?useUnicode=true&characterEncoding=utf8");
        dsc.setUsername("root");
        dsc.setPassword("2459689935");
        generator.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        // 配置父包
        pc.setParent("com.einmeer");
        // 配置各文件的生成路径放在一个map中
        Map<String,String> pathInfo = new HashMap<>();
        pathInfo.put("entity_path",entity);
        pathInfo.put("mapper_path",mapper);
        pathInfo.put("xml_path",xml);
        pathInfo.put("service_path",service);
        pathInfo.put("service_impl_path",service_impl);
        pathInfo.put("controller_path",controller);
        pc.setPathInfo(pathInfo);
        generator.setPackageInfo(pc);
        //策略配置
        StrategyConfig sc = new StrategyConfig();
        // 表名生成类名的时候，下划线转驼峰
        sc.setNaming(NamingStrategy.underline_to_camel);
        // 列名生成属性的时候下划线转驼峰
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        // 所有的controller都加RestController注解
        sc.setRestControllerStyle(true);
        // 所有entity都加lombok注解
        sc.setEntityLombokModel(true);
        //所有的entity都继承BaseEntity
        sc.setSuperEntityClass(BaseEntity.class);
        // 所有的entity都不再生成id属性
        sc.setSuperEntityColumns("id");
        // 定义生成的表
        sc.setInclude(table);
        generator.setStrategy(sc);
        // 模板引擎配置
        generator.setTemplateEngine(new FreemarkerTemplateEngine());

        //调用生成方法
        generator.execute();


//        Properties properties = System.getProperties();
//        Set<Map.Entry<Object, Object>> entries = properties.entrySet();
//        for (Map.Entry<Object,Object> entry:entries){
//            System.out.println(entry.getKey()+"----------"+entry.getValue());
//        }


    }
}
